#ifndef _SOFT_IIC_H_
#define _SOFT_IIC_H_

#include <stdint.h>
#include <string.h>

#ifndef SET
    #define SET    1
#endif

#ifndef RESET
    #define RESET  0
#endif

typedef struct {
    void    (*pfn_usdelay)(uint32_t delay);
    void    (*pfn_sda_set)(uint8_t stat);
    uint8_t (*pfn_sda_get)(void);
    void    (*pfn_scl_set)(uint8_t stat);
}soft_iic_struct;

/* init函数主要检测结构体成员函数指针有效性，且设置IIC初始状态 */
int soft_iic_init(soft_iic_struct *soft_iic);

/* 请确保结构体的所有成员指针函数功能正常，否则可能造成不可预知问题 */
uint8_t soft_iic_puts(soft_iic_struct *soft_iic, 
                      uint8_t          slave_addr, 
                      uint8_t          reg_addr,
                      uint8_t         *p_data,
                      uint8_t          len);

/* 请确保结构体的所有成员指针函数功能正常，否则可能造成不可预知问题 */
uint8_t soft_iic_gets(soft_iic_struct *soft_iic,
                      uint8_t          slave_addr,
                      uint8_t          reg_addr,
                      uint8_t         *p_data,
                      uint8_t          len);


#endif  

